/**
 * \file arch.h
 * \author Davide Gessa
 * \date 10-12-09
 */

#ifndef ARCH_H
#define ARCH_H

#include <types.h>

/*
 * Input Ouput sulle porte della macchina
 */
void io_outb(uint16_t, uint8_t);
uint8_t io_inb(uint16_t);
void io_outw(uint16_t, uint16_t);
uint16_t io_inw(uint16_t);
void io_outd(uint16_t, uint32_t);
uint32_t io_ind(uint16_t);
void io_outl(uint16_t, uint64_t);
uint64_t io_inl(uint16_t);


/*
 * Handler per gli irq
 */
void handler_reg(uint8_t, void (*)(regs_t *r));
void handler_unreg(uint8_t);


/*
 * Timer e Clock
 */
void arch_sleep(uint32_t);
uint32_t arch_get_clock();
uint32_t arch_get_tick();

/*
 * Funzioni per la paginazione
 */
void paged_enable();


/*
 * Funzioni per i task
 */
void task_switch_to_user_mode();

/*
 * Inizializza l'architettura
 */
void arch_init();


#endif
